package com.tsystems.entities;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.PrePersist;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;

@Entity
public class Passenger implements Serializable {

	private static final long serialVersionUID = 7893841727076498953L;

	@Id
	private String id;

	@PrePersist
	public void prepareId() {
		if (id == null) {
			id = UUID.randomUUID().toString();
		}
	}

	@NotNull(message = "Имя пользователя должно быть задано.")
	@Size(max = 40, message = "Имя пользователя должно быть меньше 40 символов.")
	@Column(unique = true)
	private String login;

	@NotNull(message = "Пароль должен быть задан.")
	@Size(max = 100, message = "Длина пароля должна быть меньше 100 символов.")
	private String password;

	@NotNull(message = "Имя должно быть задано.")
	@Size(max = 20, message = "Имя должно быть меньше 20 символов.")
	private String name;

	@NotNull(message = "Фамилия должна быть задана.")
	@Size(max = 20, message = "Фамилия должна быть меньше 20 символов.")
	private String surname;

	@Past(message = "Дата рождения должна быть в прошлом.")
	private Date birthday;

	@OneToMany(mappedBy = "passenger", cascade=CascadeType.ALL)
	private List<Ticket> tickets = new ArrayList<Ticket>();

	public Passenger() {

	}

	public Passenger(Passenger passenger) {
		this();
		this.login = passenger.getLogin();
		this.password = passenger.getPassword();
		this.name = passenger.getName();
		this.surname = passenger.getSurname();
		this.birthday = passenger.getBirthday();
	}

	public Passenger(String login, String password, String name,
			String surname, Date birthday) {
		this();
		this.login = login;
		this.password = password;
		this.name = name;
		this.surname = surname;
		this.birthday = birthday;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSurname() {
		return surname;
	}

	public void setSurname(String surname) {
		this.surname = surname;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public List<Ticket> getTickets() {
		return tickets;
	}

	public void setTickets(List<Ticket> tickets) {
		this.tickets = tickets;
	}

	@Override
	public String toString() {
		return login + ": " + name + " " + surname;
	}

}
